// TODO: 2025/5/24
//ArrayList的遍历：

import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;

public class Test1 {
    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        System.out.println(list);


        System.out.println("=====for循环输出=====");
        //我们可以用for循环来进行遍历：
        int size = list.size();
        for (int i = 0; i < size; i++) {
            System.out.print(list.get(i) + " ");
        }
        System.out.println();


        System.out.println("=====for each 输出=====");
        for (Integer s:list) {
            System.out.print(s + " ");
        }
        System.out.println();
        /*
        for each语法：
        for(类型 变量名；集合或是数组的变量名){
            System.out.print(变量名 + “ ”);
        }
         */


        System.out.println("=====使用迭代器iterator输出=====");
        //list.iterator();//我们看到源码的返回值是Iterator <E>,所以用也要用接口来接收,他有特定的输出方式
        Iterator<Integer> iterator = list.iterator();
        while (iterator.hasNext()){
            System.out.print(iterator.next() + " ");
            //意味着打印当前iterator的下一个，同时iterator往后走一步
            //就是在集合之外，如果判断这个迭代器的下一个存在，那么直接打印，并且往下走一个位置（走到打印的那个位置），如果没有就不再打印
        }
        System.out.println();


        System.out.println("=====使用迭代器ListIterator输出=====");
        ListIterator<Integer> listIterator = list.listIterator();
        while (listIterator.hasNext()){
            System.out.print(listIterator.next() + " ");
        }
        System.out.println();
        //两者基本没什么区别！
        //但是ListIterator比Iterator更具体，因为它可以专门打印list的内容了相当于扩展了Iterator\


        System.out.println("=====使用迭代器ListIterator输出 扩展=====");//可以从指定位置进行打印
        ListIterator<Integer> listIterator1 = list.listIterator(list.size());//从最后一个位置进行打印
        //从后往前打印：previous表示先前的，逆序打印
        while (listIterator1.hasPrevious()){
            System.out.print(listIterator1.previous() + " ");
        }
        System.out.println();
    }
    //迭代器是一种设计模式，我们后续会进行详细的讲解



}
